/* 虚线绘制 在画布中间*/ 
#define REPEAT 4.0

#define S smoothstep 


// 
float pulse01(float t, float duty, float edge){
  float a = S(0.0, edge, t);         // 在 [0,edge] 内平滑由 0 → 1，形成软起始边。[web:2]  【起始边】
  float b = S(duty, duty+edge, t);   // 在 [duty,duty+edge] 内平滑由 0 → 1，用于计算软结束边。[web:2] 【结束边】
  return clamp(a*(1.0-b), 0.0, 1.0); // a 与 (1-b) 相乘得到中间平顶段，并夹到 0..1 保持稳定。[web:2]
}

void main() {
    vec2 vUv = gl_FragCoord.xy / iResolution.xy;
    vec2 st = vUv;
    float d = abs(st.x - 0.5);
    float glow = 1.0 - d;
    glow = step( 0.999, glow );

    // dash 
    float t_repeat_phase = fract( st.y * REPEAT + iTime );
    glow *= pulse01( t_repeat_phase, 0.8, 0.01 );
    
    vec3 final_color = vec3( glow * vec3( 1.0 ) );
    gl_FragColor = vec4( final_color, 1.0 );
}